package com.example.demo.util;

import org.ahocorasick.trie.Token;
import org.ahocorasick.trie.Trie;

import java.util.*;

public class TextKeywordsMatchUtil {

    private static Trie buildAhoCorasickTrie() {
        return Trie.builder()
                .ignoreOverlaps() // 设置不捕获重叠的关键词
                .onlyWholeWords() // 仅匹配完整的单词
                .ignoreCase() // 忽略关键词的大小写
                .addKeywords(Arrays.asList("南京大学", "南大", "地球科学"))
                .build(); // 构建Trie实例
    }

    private static String createHtmlContentForNanjingUniversity() {
        // 此处添加创建南京大学HTML内容的方法实现
        String speech = "                <!DOCTYPE html>\n" +
                "                <html lang=\"zh-CN\">\n" +
                "                <head>\n" +
                "                    <meta charset=\\\"UTF-8\\\">\n" +
                "                    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
                "                    <title>南京大学简介</title>\n" +
                "                    <style>\n" +
                "                        body {\n" +
                "                            font-family: \"微软雅黑\", \"宋体\", Arial, sans-serif;\n" +
                "                            line-height: 1.6;\n" +
                "                            color: #333;\n" +
                "                        }\n" +
                "                        .university-intro {\n" +
                "                            text-align: justify;\n" +
                "                            margin-bottom: 2em;\n" +
                "                            padding: 1rem;\n" +
                "                            background-color: #f5f5f5;\n" +
                "                            border-radius: 5px;\n" +
                "                        }\n" +
                "                    </style>\n" +
                "                </head>\n" +
                "                <body>\n" +
                "                <section class=\"university-intro\">\n" +
                "                    <h1>南京大学：百年名校，学术卓越</h1>\n" +
                "                    <p>南京大学，简称“<a>南大</a>”，位于中国江苏省南京市，是中国最顶尖的高等学府之一，拥有百年的办学历史和深厚的文化底蕴。作为中国教育部直属的全国重点大学，南大以其卓越的学术成就和教育质量闻名于世。</p>\n" +
                "                    <p>南京大学以其强大的师资力量和学术研究而著称，提供多元化的学科教育，包括自然科学、人文社会科学、工程技术等多个领域。学校注重培养学生的创新能力和国际视野，为国家和社会培养了大量杰出人才。</p>\n" +
                "                    <p>南大校园环境优美，历史与现代交融，是学术研究和知识探索的理想场所。学校在计算机科学、地球科学、化学等学科领域具有国际领先水平，并在推动科学技术进步和文化传承方面发挥着重要作用。</p>\n" +
                "                </section>\n" +
                "                </body>\n" +
                "                </html>";
        return speech;
    }

    public static void main(String[] args) {
//        String article = "这是一篇示例文章，用于演示多关键词搜索。我们可以在文章中查找多个关键词，如示例、关键词、搜索等。";
//        String[] keywords = {"示例", "关键词", "搜索", "不存在的词"};
//        List<String> result = searchKeywords(article, keywords);
//        System.out.println("找到的关键词：");
//        for (String keyword : result) {
//            System.out.println(keyword);
//        }

        // 定义HTML内容的字符串，包含了南京大学的介绍
        String htmlContent = createHtmlContentForNanjingUniversity();
        // 创建Aho-Corasick Trie的构建器实例
        Trie trie = buildAhoCorasickTrie();
        // 使用Trie实例处理HTML文本，获取匹配的Token集合
        Collection<Token> tokens = trie.tokenize(htmlContent);
        // 使用StringBuilder构建最终的HTML字符串，用于输出高亮的关键词
        StringBuilder html = new StringBuilder();
        html.append("<html><body><p>");
        // 遍历Token集合
        for (Token token : tokens) {
            // 如果Token匹配关键词，则添加<b>标签以实现加粗效果
            if (token.isMatch()) {
                html.append("<b>");
            }
            // 添加Token对应的文本片段
            html.append(token.getFragment());
            // 如果Token匹配关键词，结束<b>标签
            if (token.isMatch()) {
                html.append("</b>");
            }
        }
        // 完成HTML字符串的构建
        html.append("</p></body></html>");
        // 打印最终的HTML字符串，其中包含高亮显示的关键词
        System.out.println(html);
    }
}
